(function () {
    "use strict";

    angular.module('core').factory('enumService', factory);
    factory.$inject = [];

    function factory() {

        const _instance = {
            romaneioStatus: {
                data: [
                    { codigo: 0, nome: "Pendente", classe: "label-warning" },
                    { codigo: 1, nome: "Concluído", classe: "label-success" },
                    { codigo: 2, nome: "Cancelada", classe: "label-danger" },
                ],
                get: (codigo) => _instance.saidaStatus.data.find(a => a.codigo == codigo),
            },
            entradaStatus: {
                data: [
                    { codigo: 0, nome: "Pendente", classe: "label-warning" },
                    { codigo: 1, nome: "Concluída", classe: "label-success" },
                    { codigo: 2, nome: "Cancelada", classe: "label-danger" },
                    { codigo: 3, nome: "Entrada Física", classe: "label-info" },
                    { codigo: 4, nome: "Entrada Fiscal", classe: "label-info" },
                ],
                get: (codigo) => _instance.entradaStatus.data.find(a => a.codigo == codigo),
            },
            saidaStatus: {
                data: [
                    { codigo: 0, nome: "Pendente", classe: "label-warning" },
                    { codigo: 1, nome: "Concluída", classe: "label-success" },
                    { codigo: 2, nome: "Cancelada", classe: "label-danger" },
                    { codigo: 3, nome: "Saída Física", classe: "label-info" },
                    { codigo: 4, nome: "Saída Fiscal", classe: "label-info" },
                ],
                get: (codigo) => _instance.saidaStatus.data.find(a => a.codigo == codigo),
            },
            especieSerieNumeroModeloFiscal: {
                data: [
                    { codigo: 55, nome: "NF-e", classe: "label-primary" },
                    { codigo: 65, nome: "NFC-e", classe: "label-primary" },
                    { codigo: 59, nome: "CF-e / SAT", classe: "label-primary" },
                ],
                get: (codigo) => _instance.especieSerieNumeroModeloFiscal.data.find(a => a.codigo == codigo),
            },
            notaFiscalSefazStatus: {
                data: [
                    { codigo: 1, nome: "Não enviada", classe: "label-warning" },
                    { codigo: 2, nome: "Aguardando evio", classe: "label-warning" },
                    { codigo: 3, nome: "Enviada", classe: "label-primary" },
                    { codigo: 4, nome: "Rejeitada", classe: "label-danger" },
                    { codigo: 5, nome: "Autorizada", classe: "label-success" },
                    { codigo: 52, nome: "Aguardando envio de inutilização", classe: "label-warning" },
                    { codigo: 59, nome: "Inutilizada", classe: "label-danger" },
                    { codigo: 42, nome: "Aguardando envio de cancelamento", classe: "label-warning" },
                    { codigo: 49, nome: "Cancelada", classe: "label-danger" },
                    { codigo: 70, nome: "Uso denegado", classe: "label-danger" },
                ],
                get: (codigo) => _instance.notaFiscalSefazStatus.data.find(a => a.codigo == codigo),
            },
            notaFiscalSefazTipoEmissao: {
                data: [
                    { codigo: 1, nome: "Emissão Normal", classe: "label-primary" },
                    { codigo: 2, nome: "Contigência FS-IA", classe: "label-warning" },
                    { codigo: 3, nome: "Contigência SCAN", classe: "label-warning" },
                    { codigo: 4, nome: "Contigência DPEC", classe: "label-warning" },
                    { codigo: 5, nome: "Contigência FS_DA", classe: "label-warning" },
                    { codigo: 6, nome: "Contigência SVC-AN", classe: "label-warning" },
                    { codigo: 7, nome: "Contigência SVC-RS", classe: "label-warning" },
                ],
                get: (codigo) => _instance.notaFiscalSefazTipoEmissao.data.find(a => a.codigo == codigo),
            },
            notaFiscalSefazFinalidade: {
                data: [
                    { codigo: 1, nome: "Nota Fiscal", classe: "label-primary" },
                    { codigo: 2, nome: "Nota Fiscal Complementar", classe: "label-primary" },
                    { codigo: 3, nome: "Ajuste", classe: "label-primary" },
                    { codigo: 4, nome: "Devolução", classe: "label-primary" },
                ],
                get: (codigo) => _instance.notaFiscalSefazFinalidade.data.find(a => a.codigo == codigo),
            },
            notaFiscalOrigem: {
                data: [
                    { codigo: 1, nome: "Venda", classe: "label-primary" },
                    { codigo: 2, nome: "Troca", classe: "label-primary" },
                    { codigo: 3, nome: "Saída", classe: "label-primary" },
                    { codigo: 4, nome: "Consumível", classe: "label-primary" },
                    { codigo: 5, nome: "Entrada", classe: "label-primary" },
                    { codigo: 6, nome: "Reserva", classe: "label-primary" },
                    { codigo: 7, nome: "Cancelamento_de_venda", classe: "label-primary" },
                    { codigo: 8, nome: "Trocas_do_dia", classe: "label-primary" },
                    { codigo: 9, nome: "Retorno_de_reserva", classe: "label-primary" },
                    { codigo: 10, nome: "Venda_ao_consumidor", classe: "label-primary" },
                    { codigo: 11, nome: "Entrada_para_conserto", classe: "label-primary" },
                    { codigo: 12, nome: "Remessa_para_conserto", classe: "label-primary" },
                    { codigo: 13, nome: "Devolução_do_conserto", classe: "label-primary" },
                    { codigo: 14, nome: "Apuração_do_IPI", classe: "label-primary" },
                    { codigo: 15, nome: "Complementar", classe: "label-primary" },
                ],
                get: (codigo) => _instance.notaFiscalOrigem.data.find(a => a.codigo == codigo),
            },
            grupoFiscalOperacaoIndicadorOperacao: {
                data: [
                    { codigo: 0, nome: "Compras", classe: "label-primary" },
                    { codigo: 1, nome: "Devolução", classe: "label-primary" },
                    { codigo: 2, nome: "Retorno de mercadorias enviadas", classe: "label-primary" },
                    { codigo: 3, nome: "Guias para faturamento futuro", classe: "label-primary" },
                    { codigo: 4, nome: "Guias de devolução para faturas negativas", classe: "label-primary" },
                    { codigo: 5, nome: "Outras", classe: "label-primary" },
                    { codigo: 6, nome: "Envio de mercadorias a retornar", classe: "label-primary" },
                    { codigo: 7, nome: "Transferência", classe: "label-primary" },
                    { codigo: 8, nome: "Venda", classe: "label-primary" },
                ],
                get: (codigo) => _instance.grupoFiscalOperacaoIndicadorOperacao.data.find(a => a.codigo == codigo),
            },
            tipoMovimentacao: {
                data: [
                    { codigo: 0, nome: "Entrada", classe: "label-primary" },
                    { codigo: 1, nome: "Saída", classe: "label-primary" },
                ],
                get: (codigo) => _instance.tipoMovimentacao.data.find(a => a.codigo == codigo),
            },
            tipoFrete: {
                data: [
                    { codigo: 0, nome: "Por conta do emitente", classe: "label-primary" },
                    { codigo: 1, nome: "Por conta do destinatário ou remetente", classe: "label-primary" },
                    { codigo: 2, nome: "Por conta de terceiros", classe: "label-primary" },
                    { codigo: 9, nome: "Sem frete", classe: "label-primary" },
                ],
                get: (codigo) => _instance.tipoFrete.data.find(a => a.codigo == codigo),
            },

            maximoLinhas: {
                data: [
                    { codigo: 100, nome: "Máximo 100 linhas", classe: "label-primary" },
                    { codigo: 1000, nome: "Máximo 1.000 linhas", classe: "label-primary" },
                    { codigo: 10000, nome: "Máximo 10.000 linhas", classe: "label-primary" },
                    { codigo: 100000, nome: "Máximo 100.000 linhas", classe: "label-primary" },
                    { codigo: 9999999, nome: "Tudo", classe: "label-primary" },
                ],
                get: (codigo) => _instance.maximoLinhas.data.find(a => a.codigo == codigo),
            },
        };

        return _instance;
    }

})();
